|
Technical Q&ACS 13 - 失われた ColorSync のシステム特性(1999年5月3日)
Q: ColorSync 2.6 をインストールして気づいたのですが、「ColorSync 特性」フォルダには適切にインストールされているのに、独自に設定した一部のシステム特性が「ColorSync」コントロールパネルまたは「ColorSync プラグイン」ポップアップメニューに表示されません。これはどういうことなのですか。 A: ColorSync の最新リリース (バージョン 2.6) で最も大きく変更された仕様の 1 つは、ICC 特性の記述 ('desc') タグを取り扱う方法です。 ICC によって定義されているように、特性の 'desc' タグには、最大で 3 つの文字列が含まれます。最初の文字列は必須の 7 ビットローマン ASCII 文字列です。2 番目の文字列はオプションのローカライズされた Unicode 文字列です。3 番目もオプションで、Mac スクリプトコードフォーマットのローカライズされた文字列です。アプリケーションは、通常、使用可能な文字列の 1 つを使って、特性の名前をポップアップメニューのリストに表示します。'desc' タグの ICC 定義の中には、このほかにも悪魔的な重要項目がいくつかあります。1 つは、3 つの文字列すべてが null で終端する必要があるということです。もう 1 つは、3 つの文字列の前には null ターミネータを含む文字カウントがあるということです。それぞれの Unicode 文字は 2 バイトを必要とするため、Unicode 文字列の文字カウントとバイトカウントを混同してはならないというのは自明です。 ColorSync の以前のバージョンでは、このタグを部分的に使用しており、その結果としてタグの内容に対するエラーチェックが十分に行われているとはいえませんでした。たとえば、CMGetScriptProfileDescription という ColorSync 関数は、Mac スクリプトコードが存在すれば特性からそれを返し、存在しなければ 7 ビットローマン ASCII 文字列を返していました。Unicode 文字列は単純に無視され、場合によっては、Unicode または Mac スクリプトコード文字列が ColorSync に準拠していないと、 cmProfileErr コードなしにゴミ (運がよければ ASCII 文字列) が返されていました。 ColorSync 2.6 は、Mac と Windows の両方で実行されるように設計されたテクノロジーの最初のリリースです。Mac スクリプトコードフォーマットの文字列は Windows では使用できないため、ColorSync クライアントはローカライズされた Unicode 文字列にアクセスする必要があります (Unicode 文字列は Mac 上でも使用できるようになりつつあります)。このような理由から、3 つの文字列すべてにアクセスするため、CMGetProfileDescriptions という新しい呼び出しが追加されました。このようにして、'desc' タグへの準拠に、より厳密な注意が払われるようになりました。たとえば、ASCII 文字列または Mac スクリプトコード文字列のいずれかが null で終端されていなかったり、文字列の文字カウントのいずれかが無効であったり 'desc' タグの範囲を超えていると、cmProfileErr コードが返されます。 アプリケーションがポップアップメニューのリストに特性を追加するときに最大のパフォーマンスを得られるように、ColorSync は、「ColorSync 特性」フォルダおよびその下位ディレクトリにインストールされているすべての特性のキャッシュを管理しています。特に、このキャッシュファイルには、CMGetProfileDescriptions を呼び出すことで取得されたそれぞれの特性の 3 つの名前が含まれています。'desc' タグが仕様に準拠していないために CMGetProfileDescriptions がエラーを返す場合、その特性はキャッシュに追加されません。これが、ColorSync 2.6 をインストールしていると、たとえ「ColorSync 特性」フォルダに適切にインストールされているとしても、仕様に準拠しない特性が「ColorSync」コントロールパネルや「ColorSync プラグイン」ポップアップメニューに表示されなくなる理由です。 この問題の改善策は原因となっている特性を修復することです。残念ながら、ColorSync 2.6 の一部としてインストールされる「Rename Profile」AppleScript は、ColorSync 特性キャッシュに格納されている特性のみを対象としているため、不正な 'desc' タグを含む特性の修復には使用できません。その代わりに、近い将来、任意の特性の検証と修復を行う「Profile First Aid」という名前の単純なスタンドアロンツールが ColorSync Web サイトから入手できるようになるはずです。 ColorSync web site.
-- David Hayward and Scott Kuechle Worldwide Developer Technical Support テクニカル Q&A | 目次 To contact us, please use the Contact Us page. |